#include "mainsample.h"
#include "control_sample/table_sample/tablewidget.h"
#include "controls/table/cxitable.h"
#include "ui_mainsample.h"

#include <QLineEdit>
#include <QMessageBox>
#include <control_sample/dropdownbutton_sample/dropdownbuttonwidget.h>
#include <control_sample/menu_sample/menuwidget.h>
#include <control_sample/message_sample/messagewidget.h>
#include <control_sample/spinbox_sample/spinboxwidget.h>
#include <control_sample/combobox_sample/comboboxwidget.h>
#include <utils/subwindowmanager.h>
MainSample::MainSample(QWidget* parent)
	: QMainWindow(parent), ui(new Ui::MainSample)
{
	ui->setupUi(this);
	init();


}

MainSample::~MainSample()
{
	delete ui;
}
void MainSample::slot_action_menu_triggered()
{
	auto* act = qobject_cast<QAction*>(sender());
	auto& mgr = SubWindowManager::instance();
	if (!act) return;
	auto key = act->data().toString();
	if (mgr.widgetInstance(key) == nullptr)
	{
		auto page = new MenuWidget;
		mgr.registerWidget(key, page);
		ui->main->addTab(page, key);
	}
	ui->main->setCurrentWidget(mgr.widgetInstance(key));
}
void MainSample::slot_action_msgbox_triggered()
{
	// 获取发送者（通常是触发此槽函数的QAction）
	auto* act = qobject_cast<QAction*>(sender());
	// 获取子窗口管理器单例
	auto& mgr = SubWindowManager::instance();
	// 检查发送者有效性
	if (!act) return;
	// 从Action中获取标识key（用于区分不同窗口）
	auto key = act->data().toString();
	// 检查该key对应的窗口是否已存在，不存在则创建并注册
	if (mgr.widgetInstance(key) == nullptr)
	{
		// 创建MessageWidget实例
		auto page = new MessageWidget;
		// 注册到窗口管理器
		mgr.registerWidget(key, page);
		// 添加到主窗口的标签页
		ui->main->addTab(page, key);
	}
	// 切换到该窗口所在的标签页
	ui->main->setCurrentWidget(mgr.widgetInstance(key));
}
void MainSample::init()
{
	ui->main->clear();
	initAction();
}
void MainSample::initAction()
{
	ui->action_menu->setData({"MenuWidget"});
	ui->action_msgbox->setData({"MessageWidget"});
	ui->action_spinbox->setData({"SpinBoxWidget"});
	ui->action_comb->setData({"comboBoxWidget"});
	connect(ui->action_menu, &QAction::triggered, this, &MainSample::slot_action_menu_triggered);
	connect(ui->action_msgbox, &QAction::triggered, this, &MainSample::slot_action_msgbox_triggered);
	connect(ui->action_spinbox, &QAction::triggered, this, &MainSample::slot_action_spinbox_triggered);
	connect(ui->action_dropdownbutton, &QAction::triggered, this, &MainSample::slot_action_dropdownbutton_triggered);
	connect(ui->action_table, &QAction::triggered, this, &MainSample::slot_action_table_triggered);
	connect(ui->action_comb, &QAction::triggered, this, &MainSample::slot_action_combobox_triggered);
}

void MainSample::slot_action_spinbox_triggered()
{
		// 获取发送者（通常是触发此槽函数的QAction）
		auto* act = qobject_cast<QAction*>(sender());
		// 获取子窗口管理器单例
		auto& mgr = SubWindowManager::instance();
		// 检查发送者有效性
		if (!act) return;
		// 从Action中获取标识key（用于区分不同窗口）
		auto key = act->data().toString();
		// 检查该key对应的窗口是否已存在，不存在则创建并注册
		if (mgr.widgetInstance(key) == nullptr)
		{
			// 创建MessageWidget实例
			auto page = new SpinBoxWidget;
			// 注册到窗口管理器
			mgr.registerWidget(key, page);
			// 添加到主窗口的标签页
			ui->main->addTab(page, key);
		}
		// 切换到该窗口所在的标签页
		ui->main->setCurrentWidget(mgr.widgetInstance(key));

}
void MainSample::slot_action_combobox_triggered()
{
	// 获取发送者（通常是触发此槽函数的QAction）
	auto* act = qobject_cast<QAction*>(sender());
	// 获取子窗口管理器单例
	auto& mgr = SubWindowManager::instance();
	// 检查发送者有效性
	if (!act) return;
	// 从Action中获取标识key（用于区分不同窗口）
	auto key = act->data().toString();
	// 检查该key对应的窗口是否已存在，不存在则创建并注册
	if (mgr.widgetInstance(key) == nullptr)
	{
		// 创建MessageWidget实例
		auto page = new ComboBoxWidget;
		// 注册到窗口管理器
		mgr.registerWidget(key, page);
		// 添加到主窗口的标签页
		ui->main->addTab(page, key);
	}
	// 切换到该窗口所在的标签页
	ui->main->setCurrentWidget(mgr.widgetInstance(key));
}

void MainSample::slot_action_dropdownbutton_triggered()
{
	// 获取发送者（通常是触发此槽函数的QAction）
	auto* act = qobject_cast<QAction*>(sender());
	// 获取子窗口管理器单例
	auto& mgr = SubWindowManager::instance();
	// 检查发送者有效性
	if (!act) return;
	// 从Action中获取标识key（用于区分不同窗口）
	auto key = act->data().toString();
	if (key.isEmpty())
	{
		key = "下拉按钮";
	}
	// 检查该key对应的窗口是否已存在，不存在则创建并注册
	if (mgr.widgetInstance(key) == nullptr)
	{
		// 创建MessageWidget实例
		auto page = new DropDownButtonWidget;
		// 注册到窗口管理器
		mgr.registerWidget(key, page);
		// 添加到主窗口的标签页
		ui->main->addTab(page, key);
	}
	// 切换到该窗口所在的标签页
	ui->main->setCurrentWidget(mgr.widgetInstance(key));
}
void MainSample::slot_action_table_triggered()
{
	// 获取发送者（通常是触发此槽函数的QAction）
	auto* act = qobject_cast<QAction*>(sender());
	// 获取子窗口管理器单例
	auto& mgr = SubWindowManager::instance();
	// 检查发送者有效性
	if (!act) return;
	// 从Action中获取标识key（用于区分不同窗口）
	auto key = act->data().toString();
	if (key.isEmpty())
	{
		key = "表格控件";
	}
	// 检查该key对应的窗口是否已存在，不存在则创建并注册
	if (mgr.widgetInstance(key) == nullptr)
	{
		// 创建MessageWidget实例
		auto page = new TableWidget;
		// 注册到窗口管理器
		mgr.registerWidget(key, page);
		// 添加到主窗口的标签页
		ui->main->addTab(page, key);
	}
	// 切换到该窗口所在的标签页
	ui->main->setCurrentWidget(mgr.widgetInstance(key));
}

